\documentclass[10pt]{report} 

\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage{setspace}
\usepackage[colorlinks=true]{hyperref}
\usepackage{geometry}
\usepackage[dvips]{graphicx}
\usepackage{import}
\usepackage{listings}
\usepackage{fancyhdr}
\usepackage[nottoc, notlof, notlot]{tocbibind}

\geometry{verbose,tmargin=2.5cm,bmargin=3cm,lmargin=2cm,rmargin=2cm}
\graphicspath{{img/}}
\hypersetup{urlcolor=blue,linkcolor=black,citecolor=black,colorlinks=true} 

\addto\extrasfrench{\providecommand{\og}{\leavevmode\flqq~}\providecommand{\fg}{\ifdim\lastskip>\z@\unskip\fi~\frqq}}

\pagestyle{fancy}
\fancyhf{}

\fancyhead[LE,RO]{\textbf{\thepage}}
\fancyhead[LO]{\textsl{\rightmark}}
\fancyhead[RE]{\textsl{\leftmark}}
\fancyfoot[CO]{\thepage}


\def\blurb{%
  Université Bordeaux 1\\
  Master Informatique\\
  Projet De Programmation}
\def\clap#1{\hbox to 0pt{\hss #1\hss}}%
\def\ligne#1{%
  \hbox to \hsize{%
    \vbox{\centering #1}}}%
\def\haut#1#2#3{%
  \hbox to \hsize{%
    \rlap{\vtop{\raggedright #1}}%
    \hss
    \clap{\vtop{\centering #2}}%
    \hss
    \llap{\vtop{\raggedleft #3}}}}%
\def\bas#1#2#3{%
  \hbox to \hsize{%
    \rlap{\vbox{\raggedright #1}}%
    \hss
    \clap{\vbox{\centering #2}}%
    \hss
    \llap{\vbox{\raggedleft #3}}}}%
\begin{document}
\thispagestyle{empty}\vbox to .9\vsize{%
  \vss
  \vbox to 1\vsize{%
    \haut{}{\blurb}{}
    \vfill
    \ligne{\Huge{\textbf{Student's Programming Assignment Submission System} \\Démarrage rapide}}
    \vspace{10mm}
	\ligne{\Large Vincent Autefage}
	\ligne{<\url{vincent.autefage@etu.u-bordeaux1.fr}>}
	\ligne{\Large Thomas Cellier} 
	\ligne{<\url{thomas.cellier@etu.u-bordeaux1.fr}>}
	\ligne{\Large Mohamed El Fardi}
	\ligne{<\url{mohamed.el-fardi@etu.u-bordeaux1.fr}>}
	\ligne{\Large Loïc Fournier}
	\ligne{<\url{loic.fournier@etu.u-bordeaux1.fr}>}
    \vfill
    \vspace{5mm}
    \ligne{%
      \begin{tabular}{l}
        \Large \textbf{Client :} Emmanuel Fleury\\
        \Large \textbf{Tuteur :} Robert Strandh
      \end{tabular}
      }
    \vspace{5mm}
    \ligne{
  	\includegraphics[width=2cm,height=2cm]{logo_bordeaux1}
	\hspace{0.8cm}
  	\includegraphics[width=2cm,height=2cm]{logo_labri}}
    }%
  \vss
  }

\newpage

\section*{Installation}
\addcontentsline{toc}{section}{Installation}

\paragraph*{}
SPASS est fourni sous la forme d'une archive \textit{spass.tar.gz}.
Cette archive contient les fichiers suivants :\\

\begin{verbatim}
|-- spass.d/
|   |-- bin/
|   |-- configure*
|   |-- demo*
|   |-- README
|   |-- spass/
\end{verbatim}

\paragraph*{}
Le répertoire \textbf{bin} contiendra un exécutable pour SPASS.\\
Le script \textbf{configure} permet de générer certains fichiers de configuration pour SPASS en fonction des variables définies dans son entête.
Le premier est \textit{spass.d/spass/settings.py} qui contiendra plusieurs variables globales utiles à la plateforme. Le second est l'exécutable \textit{spass.d/spass/start.sh}. Un lien symbolique \textit{spass.d/bin/spass} sera créé vers le précédent script.
Le script \textbf{demo} est un exemple de l'utilisation de SPASS.\\
Le répertoire \textbf{spass} contient les sources du logiciel.

\paragraph*{}

\textbf{Attention :\underline{}} Pour utiliser SPASS, vous devez avoir installer la version \textbf{0.6 Beta1} de \textit{SQL Alchemy}.
N'oubliez pas de mettre à jour la variable d'environnement \textit{PYTHONPATH} si nécessaire.

\paragraph*{}

Il ne vous reste plus qu'à lancer le script \textit{configure} avant d'utiliser SPASS.

\section*{Utilisation}
\addcontentsline{toc}{section}{Utilisation}

\paragraph*{}
SPASS est ici utilisable d'une manière similaire à n'importe quelle commande shell.
Si vous souhaitez des informations sur les options disponibles : \textit{spass help}


\section*{Intégration d'un plugin}
\addcontentsline{toc}{section}{Intégration d'un plugin}

\paragraph*{}
Pour rajouter un \textit{plugin}, il suffit de rajouter un répertoire portant le nom de la commande dans le répertoire \textit{spass/plugins/commands}.
Ce dossier doit contenir au minimum 2 fichiers :\\

\begin{itemize}
\item \textbf{main.py} contenant une fonction \textit{run(argv)} qui sera appelée pour lancer le \textit{plugin} 
\item \textbf{\_\_init\_\_.py}
\end{itemize}

\paragraph*{}
L'intégration d'un \textit{plugin} est faite de manière dynamique, aucune autre modification n'est nécessaire.
Deux \textit{plugins} minimalistes sont fournis en guise d'exemple.

\newpage
\section*{Intégration d'un jeu de tests}
\addcontentsline{toc}{section}{Intégration d'un jeu de tests}

\paragraph*{}
Pour créer un set de tests, vous devez :\\

\begin{itemize}
\item Créer un répertoire portant le nom du set.
\item Créer un sous répertoire pour chaque script de tests.
\end{itemize}

\paragraph*{}
Un script est écrit sous la forme suivante :\\

\begin{verbatim}
|-- test_name/
|-- 1_test1.py
|-- 1_test1.d/
|   |-- 1_test3.py
|-- 2_test2.py
\end{verbatim}

\paragraph*{}
Un script est donc composé d'une série de tests uniques écrits en Python qui seront exécutés de manière ordonnée.
Chaque fichier de tests comporte une méthode \textit{fixture(arg)} qui permet de définir l'environnement d'exécution du test (variables d'environnement diverses, etc...). Le chemin du répertoire à tester sera passé en paramètre de la fonction.
Les fichiers de tests comportent également une fonction \textit{run(arg1, arg2)} qui sera exécutée par la procédure de test. \textit{arg1} est le chemin du répertoire à tester et \textit{arg2} représente l'élément retourné par la fonction \textit{fixture}.\\

L'algorithme général d'exécution d'un test est le suivant :

\begin{verbatim}
Test(cur, dir):
  Pour chaque <i>_<name>.py :
    fixret = <i>_<name>.fixture(dir)
    ret <i>_<name>.run(dir, fixret)
    si ret == 0 et existe(<i>_<name>.d) :
      Test(<i>_<name>.d, dir)
  cur = parent(cur)
\end{verbatim}

\end{document}
